package com.sales.service;

import com.sales.entity.Profile;
import com.sales.excption.SalesException;
import com.sales.signUpReq.ProfileSignUpReq;
import com.sales.vo.ProfileVo;
import com.sales.vo.ReferralCodesVo;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by lihu on 2017/9/7.
 */
public interface ProfileService {

    /**
     * 更新用户数据
     *
     * @param profileSignUpReq
     */
    void putProfile(ProfileSignUpReq profileSignUpReq);


    /**
     * 通过账号获取账号信息
     *
     * @param username
     * @return
     */
    ProfileVo getProfile(String username);

    /**
     * 获取相关邀请码信息(包含上级)
     *
     * @param username
     * @return
     */
    ReferralCodesVo getReferralCodes(String username, Pageable pageable);

    /**
     * 减少推荐码的次数
     * @param code
     */
    void reduceRefCode(String code);




    /**
     * 获取相关邀请码信息(不包含上级)
     *
     * @param username
     * @return
     */
    List<String> getReferralCodes(String username);

    /**
     * 创建用户信息
     *
     * @param mobile
     * @param username
     * @return
     */
    void createProfile(String mobile, String username);

    /**
     * 通过上级账号和邀请码查询相关信息
     *
     * @param username
     * @param code
     * @return
     */
    Profile getProfileWithCode(String username, String code);


    /**
     * 校验邀请码并做相关操作
     *
     * @param code
     * @param status=true 修改相关参数 false只校验正确性
     * @return
     */
    void checkCode(String code);

    /**
     * 修改邀请码状态
     *
     * @param code    邀请码
     * @param enabled 状态
     */
    void updateStatus(String code, boolean enabled);

    /**
     * 通过邀请码获取推荐人名称
     *
     * @param codes
     * @return
     */
    Map<String, String> getNameWithCode(Set<String> codes);


    void updateRefCode(String code,int count,String userName) throws SalesException;


}
